#ifndef FILE_H
#define FILE_H

#include "base_file.h"

namespace base
{
namespace utils
{
/**
 * 文件读写
 *
 * @author: haitao.lin
 */
class File: public base::utils::BaseFile
{
public:
  /**
   * 向指定的文件写入指定的内容，返回值表示是否写入成功
   */
  static bool saveTextTo(const std::string &file_name, const std::string &text);

public:
  explicit File(const std::string &file_name);

  /**
   * 写入内容，返回值表示写入成功的长度
   */
  std::size_t write(const std::string &content);

  /**
   * 读取所有文件内容
   * offset参数表示开始读取的偏移
   * 如果在调用之前有读取过文件，则会影响该函数的开始读取位置
   */
  std::string readAll(std::size_t offset = 0);

  /**
   * 读取指定数量的字符串，如果内容不够，则读完
   * offset参数表示开始读取的偏移
   * 读取位置置于本次最后读取的内容的结尾
   */
  std::string read(std::size_t maxSize, std::size_t offset = 0);

  /**
   * 从标记开始位置读取到一行结尾，包括终止符
   * offset参数表示开始读取的偏移
   */
  std::string readLine(std::size_t maxSize, std::size_t offset = 0);
};
}
}


#endif //FILE_H
